# 获取输入参数
# 默认获取最新的dmp文件
set -e

# $1: core file name
# $2: dmp file name

ROOT_PATH=$(pwd)
latest_dmp_name=$(ls -lt ${ROOT_PATH}/crashpad/pending | grep dmp | head -n 1 | awk '{print $9}')

core_file_name=${1:-"core"}
dmp_file_name=${2:-${ROOT_PATH}/crashpad/pending/${latest_dmp_name}}
output_file_name=${3:-"error.log"}
target_file_name=${4:-${ROOT_PATH}/MyCrashpadProject}
symbols=${ROOT_PATH}/Log/symbols

getSymbol () {
    #获取可执行文件的名字
    OIFS=$IFS; IFS="/"; array=($target_file_name); IFS=$OIFS
    file_name=${array[-1]}
    /data/home/bojuchen/breakpad/src/src/tools/linux/dump_syms/dump_syms $target_file_name > ${file_name}.sym
}

getStackTrace() {
    sym_file_name=$file_name'.sym'
    # 获取符号文件中的行
    line1=$(head -n1 $sym_file_name)
    OIFS=$IFS; IFS=" "; set -- $line1; aa=$1;bb=$2;cc=$3;dd=$4;IFS=$OIFS;

    version_number=$dd
    # 创建特定的目录文件，并把符号文件放入
    rm -rf ${symbols}/$file_name
    mkdir -p ${symbols}/$file_name/$version_number
    mv $sym_file_name ${symbols}/$file_name/$version_number
    
    /data/home/bojuchen/breakpad/src/src/tools/linux/md2core/minidump-2-core $dmp_file_name > $core_file_name
    gdb --batch $target_file_name $core_file_name -ex "bt full" > $output_file_name
    echo -e "\n========================================\n" >> $output_file_name
    /data/home/bojuchen/breakpad/src/src/processor/minidump_stackwalk $dmp_file_name ${symbols} >> $output_file_name
}

main(){
     getSymbol
     if [ $? -ne 0 ]; then
          echo "failed to get symbol" 
     else
         getStackTrace
     fi
}
main
